package com.sob.bountyhunter;

public class Temporizador {
	private long timeStart;				//Tiempo de comienzo
	private long duration;				//Cuanto dura (en milisegundos)
	private long intervalo;				//Intervalo (en milisegundos)
	private int tickCount=0;			//Cuantos intervalos lleva
	private boolean enabled = false;	//Si esta activo o no
	private boolean finished = false;	//Si ha acabado o no
	
	public Temporizador(long d){
		setDuration(d);
		setIntervalo(0);
		setTimeStart(System.currentTimeMillis());		
	}
	
	public Temporizador(long d, long in){
		setDuration(d);
		setIntervalo(in);
		setTimeStart(System.currentTimeMillis());		
	}

	/**
	 * Inicia el temporizador
	 */
	public void start(){
		setTimeStart(System.currentTimeMillis());
		enabled=true;
		finished=false;
	}
	
	/**
	 * Para el temporizador
	 */
	public void stop(){
		enabled=false;
		finished=false;
	}
	
	/**
	 * Comprueba si aun se esta ejecutando
	 * @return
	 */
	public boolean isRunning(){
		isFinished();
		return enabled;
	}

	/**
	 * Comprueba si hay un nuevo intervalo
	 * @return
	 */
	public boolean isTick(){
		boolean res=false;
		if(enabled && getIntervalo()>0){
			if((System.currentTimeMillis()-getTimeStart())>getIntervalo()*(tickCount+1)){
				tickCount++;
				res=true;
			}
		}
		
		return res;
	}
	
	/**
	 * Comprueba si ha acabado
	 * @return
	 */
	public boolean isFinished(){
		if(enabled){
			if(System.currentTimeMillis()>=getTimeStart()+getDuration()){
				finished=true;
				enabled=false;
			}
		}		
		return finished;
	}

	//Getters y Setters
	public int getTickCount(){
		return tickCount;
	}	
	public long getTimeStart() {
		return timeStart;
	}
	public void setTimeStart(long timeStart) {
		this.timeStart = timeStart;
	}
	public long getDuration() {
		return duration;
	}
	public void setDuration(long duration) {
		this.duration = duration;
	}
	public long getIntervalo() {
		return intervalo;
	}
	public void setIntervalo(long intervalo) {
		this.intervalo = intervalo;
	}	
}
